# Plaid methodology — best-in-class memo

**For:** BLUNT v1 account-link UX
**Decision needed:** Inline Plaid Link sheet vs hosted webview vs custom multi-provider abstraction
**Recommendation:** **Plaid Link as a native inline sheet, single provider at v1, manual fallback, strong pre/post framing screens.**

---

## Scan: how the top 6 PFM apps actually do it

| App | Aggregator(s) | Container | Pre-link framing | Manual fallback | Notable |
|---|---|---|---|---|---|
| **Copilot Money** | Plaid | Native inline sheet | Single trust screen ("Plaid · 256-bit encryption · Used by Venmo, Robinhood…") | Yes, manual + crypto | Tightest UX. Sheet feels native to Copilot, not bolted-on. Post-link account picker is gorgeous. |
| **Monarch Money** | Plaid + MX (multi-provider) | Native inline sheet | Provider picker first ("most banks: Plaid · some banks: MX") | Yes | MX kicks in only when Plaid lacks coverage. Surfacing two providers adds friction for the 95% case. |
| **Rocket Money** | Plaid + Finicity | Native inline sheet | Heavy security messaging, multi-screen pre-link | Yes | Security posture is loud — appropriate for a bill-cancel product where users hand over sensitive info. |
| **YNAB** | Plaid (US) + TrueLayer + others (intl) | Native inline sheet | Single trust screen | Yes — manual is **first-class** | YNAB's manual mode is philosophical; ~30% of users don't link banks at all. |
| **Empower** (Personal Capital) | Yodlee primary | Native inline sheet | Multi-screen pre-link, investment-account focus | Yes, especially for brokerage | Outlier — Yodlee not Plaid. Heavier flow built for net-worth tracking, not budgeting. |
| **Lunch Money** | Plaid + manual + crypto wallets | Native inline sheet | Light single-screen | Yes — manual is core | Power-user product. Lightweight Plaid wrapper. Manual entry treated equal-class. |

### Patterns that hold across 6/6
1. **Native inline sheet container** — every app uses Plaid Link (or Yodlee equivalent) as a bottom sheet inside the app. No app punts to webview or system browser.
2. **Manual entry exists** as a fallback for unsupported institutions, crypto, and privacy-conscious users.
3. **Confirmation screen post-link** — every app shows "We found N accounts at [Bank]. Track which ones?" before importing transactions.

### Patterns that split
4. **Single vs multi-provider:** 4 single-provider (Copilot, YNAB-US, Lunch Money, Empower-Yodlee), 2 multi-provider (Monarch, Rocket). Multi-provider is added when Plaid coverage gaps hurt the product, not for engineering elegance.
5. **Pre-link framing weight:** ranges from 1 screen (Lunch Money) to 4 (Rocket Money). Heaviness correlates with how sensitive the rest of the product is — bill-cancel apps push security, budgeting apps push speed.

---

## Recommendation for BLUNT

### 1. Plaid Link as a native inline sheet — single provider at v1

**Why:** Matches 5/6 of the scan. Plaid covers ~12,000 US institutions, ~95%+ of consumer accounts. Multi-provider abstraction (Monarch/Rocket model) adds 4–6 weeks of integration work for a marginal coverage uplift that we won't need pre-product-market-fit. We can add MX or Finicity in v1.x if the gap shows up in user feedback.

**How:** Plaid Link iOS/Android SDK opens as a bottom sheet over a backdrop. Stash the fox can sit in the backdrop holding a "this is the safe part" sign — turns Plaid's neutral UX into a brand moment.

### 2. One pre-link framing screen, BLUNT-voiced

Most apps over-explain. We don't need 4 screens. One screen with the right voice does it:

> **§ 02 · Connect a bank**
> Plaid handles the password. We never touch it.
> They handle this for **Venmo, Robinhood, Coinbase, Cash App** — every fintech you already trust. If you trust those with the wire, you trust this.
> [ Continue → ]

Stash sits left of the bullets in a "thinking" pose. Mono eyebrow up top. Trust by name-drop, not by jargon.

### 3. Post-link account picker — show what we found

Plaid returns a list of accounts at the institution (checking, savings, credit cards). Let the user toggle which to track:

> **§ 03 · Found 4 accounts at Chase**
> ☑ Chase Total Checking · ••4521
> ☑ Chase Savings · ••8810
> ☑ Sapphire Reserve · ••1199
> ☐ Slate Edge (closed) · ••6633
> [ Track these →  ]

This screen also handles the credit-card timing question we locked: a small footnote says "Card spend deducts from Safe-to-Spend at swipe, not at billing — so the math is honest about what you've already committed."

### 4. Manual entry as a real option, not a punishment

Add a "Add it manually" link at the bottom of the institution-search screen. Don't bury it. Some users (privacy-minded, non-Plaid-supported credit unions, foreign accounts) will need this and we shouldn't make them rage-quit before they get to the product.

### 5. Re-link flow — when Plaid auth expires

Plaid tokens expire (varies by institution, 30–365 days). When they do, we get a webhook. Surface it as a Stash NUDGE card in Coach: *"Chase logged you out. Re-link in 30 seconds and I'll keep tracking."* Tap → opens the same Plaid Link sheet in re-auth mode. **Never** silently fail and let stale data poison Safe-to-Spend.

---

## What this changes in the wireframe

- **Account-link panel** (currently 3 screens): bumped to 4 — Search → Trust → Plaid sheet (overlay) → Account picker.
- **Plaid sheet container:** new component, a bottom-sheet shell with a backdrop where Stash can sit.
- **Re-link nudge:** new NUDGE card variant in the Coach + Notifications system.
- **Manual entry CTA:** added to the institution-search screen.
- **Credit-card timing footnote:** added to the post-link account picker.

---

## Open questions parked for later

- **MX vs Finicity as v1.x backup:** revisit after 4 weeks of production data. If <90% of users complete first-link successfully, add a backup provider.
- **Plaid Income product:** for irregular-income users, Plaid Income API can detect deposits + classify as paycheck. Worth a v1.5 evaluation.
- **Plaid Identity:** could prefill onboarding (name, email) from the first linked account. Cuts ~3 fields. v1.x optimization.
